wayland: Move and resize popup after it was configured
authorJonas Ådahl <jadahl@gmail.com>
Mon, 12 Sep 2016 10:46:44 +0000 (18:46 +0800)
committerJonas Ådahl <jadahl@gmail.com>
Wed, 14 Sep 2016 03:29:32 +0000 (11:29 +0800)
A popup may have moved and resized when configured. Make sure every
layer knows about this and call gdk_window_move_resize() with the
configured dimension and position. This won't actually move the
window, but might resize it.

https://bugzilla.gnome.org/show_bug.cgi?id=771117

gdk/wayland/gdkwindow-wayland.c

index 4c6f38d1c8499de512d12c9074b86421f4d8a675..fa8dbe0e879eadf6386063d4087fd23a53d14e6c 100644 (file)
@@ -1639,7 +1639,7 @@ translate_to_real_parent_window_geometry (GdkWindow  *window,
   *y -= parent->shadow_top;
 }
 
-static void
+static GdkWindow *
 translate_from_real_parent_window_geometry (GdkWindow *window,
                                             gint      *x,
                                             gint      *y)
@@ -1652,6 +1652,8 @@ translate_from_real_parent_window_geometry (GdkWindow *window,
 
   *x -= dx - parent->shadow_left;
   *y -= dy - parent->shadow_top;
+
+  return parent;
 }
 
 static void
@@ -1836,9 +1838,12 @@ calculate_moved_to_rect_result (GdkWindow    *window,
                                 gboolean     *flipped_y)
 {
   GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
+  GdkWindow *parent;
+  gint window_x, window_y;
+  gint window_width, window_height;
   GdkRectangle best_rect;
 
-  translate_from_real_parent_window_geometry (window, &x, &y);
+  parent = translate_from_real_parent_window_geometry (window, &x, &y);
   *final_rect = (GdkRectangle) {
     .x = x,
     .y = y,
@@ -1846,6 +1851,15 @@ calculate_moved_to_rect_result (GdkWindow    *window,
     .height = height,
   };
 
+  window_x = parent->x + x;
+  window_y = parent->y + y;
+  window_width = width + window->shadow_left + window->shadow_right;
+  window_height = height + window->shadow_top + window->shadow_bottom;
+
+  gdk_window_move_resize (window,
+                          window_x, window_y,
+                          window_width, window_height);
+
   calculate_popup_rect (window,
                         impl->pending_move_to_rect.rect_anchor,
                         impl->pending_move_to_rect.window_anchor,